using System;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Common;
using DataAccess;
using Microsoft.ApplicationBlocks.Data;

namespace BusinessRules
{
    public class Contratos
    {
        #region Params

        private const String ACC_ID_PARAM = "@ACC_ID";
        private const String CON_ID_PARAM = "@CON_ID";
        public const String DEP_ID_PARAM = "@DEP_ID";
        public const String FAE_ID_PARAM = "@FAE_ID";
        public const String CON_NUMERO_CONTRATO_PARAM = "@CON_NUMERO_CONTRATO";
        public const String CON_NOMBRE_CONTRATISTA_PARAM = "@CON_NOMBRE_CONTRATISTA";
        public const String CON_IDENTIFICACION_CONTRATISTA_PARAM = "@CON_IDENTIFICACION_CONTRATISTA";
        public const String CON_DIRECCION_PARAM = "@CON_DIRECCION";
        public const String CON_ID_NATURALEZA_JURIDICA_PARAM = "@CON_ID_NATURALEZA_JURIDICA";
        public const String CON_OBLIGACIONES_CONTRATISTA_PARAM = "@CON_OBLIGACIONES_CONTRATISTA";
        public const String CON_FECHA_SUSCRIPCION_PARAM = "@CON_FECHA_SUSCRIPCION";
        public const String CON_FECHA_INICIO_PARAM = "@CON_FECHA_INICIO";
        public const String CON_FECHA_TERMINACION_PARAM = "@CON_FECHA_TERMINACION";
        public const String CON_TIEMPO_PRORROGA_PARAM = "@CON_TIEMPO_PRORROGA";
        public const String CON_NOMBRE_INTERVENTOR_PARAM = "@CON_NOMBRE_INTERVENTOR";
        public const String CON_NUMERO_IDENTIFICACION_PARAM = "@CON_NUMERO_IDENTIFICACION";
        public const String CON_TIPO_INTERVENTORIA_PARAM = "@CON_TIPO_INTERVENTORIA";
        public const String CON_NIVEL_EXTENSION_RIESGOS_PARAM = "@CON_NIVEL_EXTENSION_RIESGOS";
        public const String CON_NORMATIVIDAD_PARAM = "@CON_NORMATIVIDAD";
        public const String CON_ESTUDIO_MERCADO_PARAM = "@CON_ESTUDIO_MERCADO";
        public const String CON_JUSTIFICACION_SELECCION_PARAM = "@CON_JUSTIFICACION_SELECCION";
        public const String CON_FORMA_PAGO_PARAM = "@CON_FORMA_PAGO";
        public const String CON_ANALISIS_GARANTIAS_PARAM = "@CON_ANALISIS_GARANTIAS";
        public const String CTC_ID_PARAM = "CTC_ID";
        public const String CON_OTRO_CONTRATO_PARAM = "CON_OTRO_CONTRATO";
        public const String CON_SUPERVISOR_PARAM = "CON_SUPERVISOR";
        public const String CON_ANALISIS_VALOR_ESTIMADO_PARAM = "CON_ANALISIS_VALOR_ESTIMADO";
        public const String CTT_ID_PARAM= "CTT_ID";
        public const String CTT_ID_PADRE_PARAM = "CTT_ID_PADRE";
        public const String CFE_ID_PARAM = "CFE_ID";
        
        
        

        #endregion

        #region CadenaConexion

        private string _CadenaConexion;
        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }

        #endregion

        #region Contratos

        public Contratos(string strCadenaConecxion)
        {
            CadenaConexion = strCadenaConecxion;
        }

        #endregion

        #region ConsultarContratosFaeID

        public ContratosData ConsultarContratosFaeID(Decimal decFaeId)
        {
            SqlParameter param1 = new SqlParameter(FAE_ID_PARAM, decFaeId);
            SqlParameter[] parameters = { param1};
            ContratosData objContratosData = new ContratosData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATOS_FAE_ID", objContratosData, parameters);
            return objContratosData;
        }

        #endregion

        #region ConsultarContratosFaeID

        public DataTable ConsultarContratosFaeIDNuevo(Decimal decFaeId)
        {
            SqlParameter param1 = new SqlParameter(FAE_ID_PARAM, decFaeId);
            SqlParameter[] parameters = { param1 };
            DataTable objContratosData = new DataTable();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATOS_FAE_ID", objContratosData, parameters);
            return objContratosData;
        }

        #endregion

        #region ConsultarContratosTodos

        public ContratacionData ConsultarContratosTodos()
        {
            //SqlParameter param1 = new SqlParameter(FAE_ID_PARAM, decFaeId);
            //SqlParameter[] parameters = { param1 };
            ContratacionData objContratosData = new ContratacionData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATOS_TODOS", objContratosData);
            return objContratosData;
        }

        #endregion

        #region ConsultarContratosOtroSI

        public ContratacionData ConsultarContratosOtroSI(string strCttId)
        {
            SqlParameter param1 = new SqlParameter(CTT_ID_PADRE_PARAM, strCttId);
            SqlParameter[] parameters = { param1 };
            ContratacionData objContratosData = new ContratacionData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATOS_OTRO_SI", objContratosData, parameters);
            return objContratosData;
        }

        #endregion

        #region ConsultarPadreContratos

        public ContratacionData ConsultarPadreContratos(string strCttId)
        {
            SqlParameter param1 = new SqlParameter(CTT_ID_PARAM, strCttId);
            SqlParameter[] parameters = { param1 };
            ContratacionData objContratosData = new ContratacionData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATOS_CTT_ID_PADRE", objContratosData, parameters);
            return objContratosData;
        }

        #endregion

        #region ConsultarCompromisosContratos

        public ContratacionEpeData ConsultarCompromisosContratos(string strCfeId)
        {
            SqlParameter param1 = new SqlParameter(CFE_ID_PARAM, strCfeId);
            SqlParameter[] parameters = { param1 };
            ContratacionEpeData objDataTable = new ContratacionEpeData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATACION_FIN_ACCION_EPE_CFE_ID", objDataTable, parameters);
            return objDataTable;
        }

        #endregion

        #region ConsultarContratosDetalleConID

        public ContratosData ConsultarContratosDetalleConID(Decimal decConId)
        {
            SqlParameter param1 = new SqlParameter(CON_ID_PARAM, decConId);
            SqlParameter[] parameters = { param1 };
            ContratosData objContratosData = new ContratosData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_CON_CONTRATOS_CON_ID", objContratosData, parameters);
            return objContratosData;
        }

        #endregion

        #region AdicionarContrato

        public decimal AdicionarContrato(ContratosData objDT, params SqlTransaction[] objTransaction)
        {
            decimal resultado = 0m;
            try
            {
                foreach (DataRow objRow in objDT.Rows)
                {
                    SqlParameter param1 = new SqlParameter(CON_ID_PARAM, SqlDbType.Decimal);
                    SqlParameter param2 = new SqlParameter(CTC_ID_PARAM, objRow[ContratosData.CTC_ID_FIELD]);
                    SqlParameter param3 = new SqlParameter(CON_OTRO_CONTRATO_PARAM, objRow[ContratosData.CON_OTRO_CONTRATO_FIELD]);
                    SqlParameter param4 = new SqlParameter(CON_OBLIGACIONES_CONTRATISTA_PARAM, objRow[ContratosData.CON_OBLIGACIONES_CONTRATISTA_FIELD]);
                    SqlParameter param5 = new SqlParameter(CON_ANALISIS_VALOR_ESTIMADO_PARAM, objRow[ContratosData.CON_ANALISIS_VALOR_ESTIMADO_FIELD]);
                    SqlParameter param6 = new SqlParameter(CON_JUSTIFICACION_SELECCION_PARAM, objRow[ContratosData.CON_JUSTIFICACION_SELECCION_FIELD]);
                    SqlParameter param7 = new SqlParameter(CON_FORMA_PAGO_PARAM, objRow[ContratosData.CON_FORMA_PAGO_FIELD]);
                    SqlParameter param8 = new SqlParameter(CON_ANALISIS_GARANTIAS_PARAM, objRow[ContratosData.CON_ANALISIS_GARANTIAS_FIELD]);
                    SqlParameter param9 = new SqlParameter(CON_SUPERVISOR_PARAM, objRow[ContratosData.CON_SUPERVISOR_FIELD]);
                    SqlParameter param10 = new SqlParameter(FAE_ID_PARAM, objRow[ContratosData.FAE_ID_FIELD]);
                    SqlParameter param11 = new SqlParameter(CON_NIVEL_EXTENSION_RIESGOS_PARAM, objRow[ContratosData.CON_NIVEL_EXTENSION_RIESGOS_FIELD]);
                    SqlParameter param12 = new SqlParameter(CON_NORMATIVIDAD_PARAM, objRow[ContratosData.CON_NORMATIVIDAD_FIELD]);



                    param1.Direction = ParameterDirection.Output;
                    SqlParameter[] parameters = { param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12 };
                    if (objTransaction.Length == 0)
                    {

                            SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                      "PAS_ADICIONAR_CON_CONTRATOS", parameters);
                    }
                    else
                    {

                            SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                      "PAS_ADICIONAR_CON_CONTRATOS", parameters);
                    }
                    resultado = Convert.ToDecimal(param1.Value);
                    
                }
            }
            catch (Exception objEx)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "Adm_Perfiles"), objEx);
            }


            return resultado;
        }

        #endregion AdicionarPerfil

        #region ActualizarContrato

        public void ActualizarContrato(ContratosData objDT, params SqlTransaction[] objTransaction)
        {
            
            try
            {
                foreach (DataRow objRow in objDT.Rows)
                {
                    SqlParameter param1 = new SqlParameter(CTC_ID_PARAM, objRow[ContratosData.CTC_ID_FIELD]);
                    SqlParameter param2 = new SqlParameter(CON_OTRO_CONTRATO_PARAM, objRow[ContratosData.CON_OTRO_CONTRATO_FIELD]);
                    SqlParameter param3 = new SqlParameter(CON_OBLIGACIONES_CONTRATISTA_PARAM, objRow[ContratosData.CON_OBLIGACIONES_CONTRATISTA_FIELD]);
                    SqlParameter param4 = new SqlParameter(CON_ANALISIS_VALOR_ESTIMADO_PARAM, objRow[ContratosData.CON_ANALISIS_VALOR_ESTIMADO_FIELD]);
                    SqlParameter param5 = new SqlParameter(CON_JUSTIFICACION_SELECCION_PARAM, objRow[ContratosData.CON_JUSTIFICACION_SELECCION_FIELD]);
                    SqlParameter param6 = new SqlParameter(CON_FORMA_PAGO_PARAM, objRow[ContratosData.CON_FORMA_PAGO_FIELD]);
                    SqlParameter param7 = new SqlParameter(CON_ANALISIS_GARANTIAS_PARAM, objRow[ContratosData.CON_ANALISIS_GARANTIAS_FIELD]);
                    SqlParameter param8 = new SqlParameter(CON_SUPERVISOR_PARAM, objRow[ContratosData.CON_SUPERVISOR_FIELD]);
                    SqlParameter param9 = new SqlParameter(FAE_ID_PARAM, objRow[ContratosData.FAE_ID_FIELD]);
                    SqlParameter param10 = new SqlParameter(CON_NIVEL_EXTENSION_RIESGOS_PARAM, objRow[ContratosData.CON_NIVEL_EXTENSION_RIESGOS_FIELD]);
                    SqlParameter param11 = new SqlParameter(CON_NORMATIVIDAD_PARAM, objRow[ContratosData.CON_NORMATIVIDAD_FIELD]);



                    SqlParameter[] parameters = { param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11 };
                    if (objTransaction.Length == 0)
                    {

                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                  "PAS_ACTUALIZAR_CON_CONTRATOS", parameters);
                    }
                    else
                    {

                        SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                  "PAS_ACTUALIZAR_CON_CONTRATOS", parameters);
                    }
                    

                }
            }
            catch (Exception objEx)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "Adm_Perfiles"), objEx);
            }


            
        }

        #endregion AdicionarPerfil
        
    }
}
